// 导入请求和响应的config类型
import { AxiosRequestConfig, AxiosResponse } from 'axios'

//TODO: 这里的写法表示是泛型的默认值<T = AxiosResponse>

// 拦截器类型   都是可选的，传入的时候就不用强制写了
export interface HYRequestInterceptors<T = AxiosResponse> {
  // 函数类型
  requestInterceptor?: (config: AxiosRequestConfig) => AxiosRequestConfig
  // 请求错误拦截
  requestInterceptorCatch?: (error: any) => any
  responseInterceptor?: (res: T) => T
  responseInterceptorCatch?: (error: any) => any
}

// 继承了AxiosRequestConfig的类型,是为了补充不足的类型
export interface HYRequestConfig<T = AxiosResponse> extends AxiosRequestConfig {
  // 扩展了interceptors类型  这个拦截器是可选的
  interceptors?: HYRequestInterceptors<T>
  // 可以决定显不显示loading
  showLoading?: boolean
}
